/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller.all;

import dao.HoadonDAO;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.tanesha.recaptcha.ReCaptchaImpl;
import net.tanesha.recaptcha.ReCaptchaResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import pojo.Chitiethoadon;
import pojo.ChitiethoadonId;
import pojo.Hoadon;
import pojo.Loaitinhtrang;
import pojo.Nguoidung;
import pojo.Sanpham;
import pojo.Tinhtrang;

/**
 *
 * @author BlueZky
 */
public class thongTinKhachHangController extends AbstractController {

    public thongTinKhachHangController() {
    }

    @Override
    protected ModelAndView handleRequestInternal(
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("UTF-8");
        ModelAndView mv = null;
        String action = request.getParameter("a");
        HttpSession session = request.getSession();

        try {
            if (action != null && action.compareToIgnoreCase("confirm") == 0) {
                String nguoiNhan = request.getParameter("receivedName");
                String diaChi = request.getParameter("receivedAddress");
                String soDienThoai = request.getParameter("receivedPhone");
                String CMND = request.getParameter("receivedID");
                Hoadon hoaDon = new Hoadon();
                String message = "";

                hoaDon.setNguoinhan(nguoiNhan);
                hoaDon.setDiachinhan(diaChi);
                hoaDon.setSodtnhan(soDienThoai);
                hoaDon.setCmndnhan(CMND);

                message = checkValidation(hoaDon);
                if (message.length() > 0) {
                    mv = new ModelAndView("User/index");
                    mv.addObject("message", message);
                    mv.addObject("tag", "thongtin");
                    return mv;
                } else {
                    Set<Chitiethoadon> dsChiTiet = new HashSet<Chitiethoadon>(0);
                    ArrayList<Sanpham> gioHang = (ArrayList<Sanpham>) session.getAttribute("gioHang");
                    Nguoidung nguoiDung = (Nguoidung) session.getAttribute("nguoiDung");
                    for (int i = 0; i < gioHang.size(); i++) {
                        Chitiethoadon tmp = new Chitiethoadon();
                        tmp.setDongia(gioHang.get(i).getGia());
                        tmp.setId(new ChitiethoadonId(0, gioHang.get(i).getMasp()));
                        tmp.setKhuyenmai("");
                        tmp.setSanpham(gioHang.get(i));
                        tmp.setSoluong(gioHang.get(i).getSoluongton());
                        tmp.setTinhtrang(new Tinhtrang(7, new Loaitinhtrang(3, "", null), "", null, null, null));
                        dsChiTiet.add(tmp);
                    }

                    hoaDon.setChitiethoadons(dsChiTiet);
                    hoaDon.setNgaydh(new Date(new java.util.Date().getTime()));
                    hoaDon.setNgaygh(null);
                    hoaDon.setNguoidung(nguoiDung);
                    hoaDon.setXoa(0);
                    hoaDon.calSum();
                    session.setAttribute("hoaDon", hoaDon);

                    mv = new ModelAndView("User/index");
                    mv.addObject("tag", "thanhtoan");
                    return mv;
                }
            } else if (action != null && action.compareToIgnoreCase("o") == 0) {
                Hoadon hoaDon = (Hoadon) session.getAttribute("hoaDon");
                Nguoidung nguoiDung = (Nguoidung) session.getAttribute("nguoiDung");
                // Lấy thông tin capcha từ request
                String remoteAddr = request.getRemoteAddr();
                ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
                reCaptcha.setPrivateKey("6LcinsgSAAAAANc_pVTmCEL8lxeHmAucwl7DvMUh");
                String challenge = request.getParameter("recaptcha_challenge_field");
                String uresponse = request.getParameter("recaptcha_response_field");
                ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse);

                if (nguoiDung == null) {
                    mv = new ModelAndView("All/dangnhap");
                    mv.addObject("message", "Bạn phải đăng nhập trước!");
                    return mv;
                }

                if (!reCaptchaResponse.isValid()) {
                    mv = new ModelAndView("User/index");
                    mv.addObject("message", "Nhập sai mã xác thực");
                    mv.addObject("tag", "thanhtoan");
                    return mv;
                }
                
                mv = new ModelAndView("User/index");
                mv.addObject("tag", "thongbao");
                if (hoaDon == null) {
                    mv.addObject("ketqua", "false");
                } else {
                    if (HoadonDAO.themHoaDon(hoaDon)) {
                        mv.addObject("ketqua", "true");
                        session.removeAttribute("hoaDon");
                        session.removeAttribute("gioHang");
                    } else {
                        mv.addObject("ketqua", "false");
                    }
                }

                return mv;
            }
            mv = new ModelAndView("User/index");
            mv.addObject("tag", "thongtin");
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            mv = null;
        }
        return mv;
    }

    private String checkValidation(Hoadon hoaDon) {
        String message = "";

        if (hoaDon.getNguoinhan() == null || hoaDon.getNguoinhan().length() == 0) {
            message += "Nhập tên người nhận";
        }
        if (hoaDon.getDiachinhan() == null || hoaDon.getDiachinhan().length() == 0) {
            message += "<br/> Nhập địa chỉ người nhận";
        }
        if (hoaDon.getSodtnhan() == null || hoaDon.getSodtnhan().length() == 0) {
            message += "<br/> Nhập số điện thoại người nhận";
        } else if (!hoaDon.getSodtnhan().matches("^[0-9]*$")) {
            message += "<br/> Số điện thoại không đúng định dạng";
        }

        if (hoaDon.getCmndnhan() == null || hoaDon.getCmndnhan().length() == 0) {
            message += "<br/> Nhập số CMND người nhận.";
        } else if (!hoaDon.getCmndnhan().matches("^[0-9]*$")) {
            message += "<br/> Số CMND không đúng định dạng";
        }

        return message;
    }
}
